Module
和 Package
是 Python 的概念,類似於其他程式語言的 Library
。旨在讓常用的程式碼封裝再被其他程式碼應用,可以提高可讀性,重用性與維護性。對於日後想要從 0 到 1 建構專案,這種程式設計概念,非常重要。
Module 就是一個 Python 檔,定義了一些 Data,Function 或是之後會介紹的 Class,可以被 匯入 (Import) 到其他程式被應用。
之前我們都在同一個檔案設定 variable 和 function,然後被同一檔案的主程式碼所應用。
但隨著專案的長大,將會出現多個 Python 檔案,而這些 Python 檔都需要共用一些 Function 的時候,我們會把共用的 Function 抽出寫成一個 Module,使可以被匯入到其他程式所應用。
以下一個例子建立一個 module 名為 module_sample.py
,然後被 main_a.py
和 main_b.py
應用
# module_sample.py
def num_sum(num_list):
total = 0
for num in num_list:
total += num
return total
# main_a.py
# 從 module_sample.py 匯入 num_sum()
from module_sample import num_sum
test_data = [1, 2, 3, 4]
# 主程式只需簡單應用匯入的 function 與數據即可
print(num_sum(test_data))
# main_b.py
from module_sample import num_sum
test_data = [2, 4, 6, 8]
print(num_sum(test_data))
執行 main_a.py
會得到 output:
10
執行 main_b.py
會得到 output:
20
而 Package 就像是一個 資料夾 包含了多個 Module,作用是把 Module 分類存放,可以整個被匯入其他程式被應用。而這個資料夾必須含有 __init__.py
才會被視為 Package。
__init__.py
可以是空的檔案。這個檔案的程式碼會被 Import 時執行,所以可以加入 Import 時想要執行的內容,例如導入依賴套件。├── package_sample
├── __init__.py
└── sample_module.py
├── main_a.py
└── main_b.py
main_a.py
和 main_b.py
的 import 語法則需要改為:
# 從 package_sample 的 module_sample 取得 num_sum()
from sample_package.module_sample import num_sum
Module 和 Package 除了可以自建,也可以應用 Python 內建的函式庫 (Build-in Library) 或是第三方套件 (Third Party Library) ,可根據需求而安裝。使用第三方套件的 可以節省時間和工作量,因為這些套件已包含大量功能和工具,只需要應用便可。而且這些第三方套件一般都由經驗豐富的開發人員編寫和維護,因此它們往往 是高質量,且經過測試的程式碼。
安裝套件的方法有很多,比較常用的會是透過 pip
安裝,安裝 Python 時就會自動包含 pip
了。
常用的 pip 指令如下:
pip install <package> #安裝套件
pip install <package>==<version> #安裝指定版本的套件
pip install --upgrade <package> #升級套件版本
pip uninstall <package> #移除套件
pip list #查看目前安裝的套件
pip show <package> #查看套件訊息
在程式中應用時,只需要 import 即可使用:
import <package>
介紹一下 Automation Test 常用的第三方套件:
Package | 用途 |
---|---|
pandas | 主要作資料的處理和分析,讀寫 Excel 等 |
faker | 用來製作假資料,如 Email, Username, Password 等等,對測試非常實用 |
pillow | 圖形處理,可用來比對圖片 |
requests | HTTP 請求套件,用於發送 HTTP 請求和處理 HTTP 響應。它簡化了進行網絡通信的過程,讓你能夠更輕鬆地進行 HTTP GET、POST 和其他各種類型的請求 |
pymysql | 處理 MySQL Database 的操作 |
sqlalchemy | 處理 SQL Database 的操作 |
小提醒:Python 檔案的命名,避免跟套件的名字相同,將會取代套件被應用。
例如檔案命名為 selenium.py ,然後裡面又應用 selenium 的套件,結果會出現 Circular Import (循環導入) 的錯誤訊息
# selenium.py
import selenium
driver = selenium.webdriver.Chrome()
driver.get("http://google.com/")
Output:
AttributeError: partially initialized module 'selenium' has no attribute 'webdriver' (most likely due to a circular import)
Python 的 虛擬環境(Virtual Environment)是一種用於隔離 Python 版本以及其依賴的工具。它允許你在同一台電腦上創建多個獨立的 Python 環境,每個環境都可以具有不同的 Python 版本和 Package,而不會互相干擾。所以需要習慣為各個專案建立 Python 虛擬環境,分別針對專案安裝不同的 Package 來執行專案的程式。
創建和管理虛擬環境一般都會使用 Python 內置的 venv
套件或者第三方套件/工具,如virtualenv
、conda
、Poetry
。
在 PyCharm 建立新專案時就可以選用需要的虛擬環境:
亦可用指令操作虛擬環境,以下是 venv
常見的虛擬環境管理操作:
python -m venv <env_name> # 建立虛擬環境,名為 <env_name>
source <env_name>/bin/activate # 啟用虛擬環境 <env_name>
deactivate # 停用虛擬環境
Module 和 Package 最主要的概念是把常用的 Function / Test Data 抽成共用,再把程式碼分門別類的存放,大大提高可 重用性、可讀性與可維護性。
再者可以應用 第三方的 Package,應用開發完善的工具,可以大幅減少開發的工作量和時間,但需要注意到 Package 之間的依賴性。為避免各個專案需要用到不同的套件,或是不同版本的套件時發生衝突,我們需要用到獨立的 虛擬環境 把執行環境分隔。